package br.com.poc.pitagorasnumero.model.bo;

import java.util.Date;

/**
 * The Interface ILifeCycleBO.
 * 
 * @author irlan.gomes
 * 
 */
public interface ILifeCycleBO {

	/**
	 * Number obtained by date of birth.
	 * 
	 * @param dateBirth
	 *            the date birth
	 * @return the int
	 */
	int doNumberDestination(Date dateBirth);

	/**
	 * Number representing the age that a person will reach maturity. Where is
	 * the thirty-seven subtracted value (fixed value) minus the number of
	 * target. Result = 37 - (No Destination).
	 * 
	 * @param numberDetination
	 *            the number destination
	 * @return year maturity
	 */
	int doFirstCycle(int numberDetination);

	/**
	 * Tells by which number - for the month of birth - will be governed the
	 * first cycle.
	 * 
	 * @param dateBirth
	 *            the date of birth
	 * @return the governed cycle number one
	 */
	int doNumberGovernedCycleOne(Date dateBirth);

	/**
	 * Number representing the age that a person will reach the sengudo cycle
	 * maturity. Where is the value added of the year of the first cycle twenty
	 * seven (fixed value). Result + = anoPrimeiroCiclo 27
	 * 
	 * @param yearFirstCycle
	 *            the year first cycle
	 * @return the second cycle
	 */
	int doSecondCycle(int yearFirstCycle);

	/**
	 * Tells by which number - referring to the day of birth - will be governed
	 * the second cycle.
	 * 
	 * @param dateBirth
	 *            the date of birth
	 * @return the governed cycle number two
	 */
	int doNumberGovernedCycleTwo(Date dateBirth);

	/**
	 * Number representing the end of the second until the end of days.
	 * 
	 * @param yearSecondCycle
	 *            the year second cycle
	 * @return the third cycle
	 */
	int doThirdCycle(int yearSecondCycle);

	/**
	 * Tells by which number - for the year of birth - will be governed the
	 * third cycle.
	 * 
	 * @param dateBirth
	 *            the date of birth
	 * @return the governed cycle number third
	 */
	int doNumberGovernedCycleThird(Date dateBirth);

}
